from django.shortcuts import render
from django.views import View
from django import http
from django.core.cache import cache

from areas.models import Area
from meiduo_mall.utils.response_code import RETCODE
# Create your views here.


class AreasView(View):
    """省市区"""

    def get(self, request):
        """查询省市区数据"""
        # 获取area_id:如果area_id是省份ID，表示查城市。如果area_id是城市ID，表示查区县。
        area_id = request.GET.get('area_id')

        # 判断要查询的是省还是市区
        if not area_id:
            # 读取省份缓存
            province_list = cache.get('province_list')
            if province_list:
                return http.JsonResponse({'code': RETCODE.OK, 'errmsg': 'OK', 'province_list': province_list})

            # 查询省份:省份数据没有父级
            # Area.objects.filter(parent__isnull=True)
            # province_model_list == <QuerySet>[Area,Area,......]
            province_model_list = Area.objects.filter(parent=None)

            # 将province_model_list转成字典列表
            province_list = []
            for province_model in province_model_list:
                province_dict = {
                    "id": province_model.id,
                    "name": province_model.name
                }
                province_list.append(province_dict)

            # 缓存省份数据
            cache.set('province_list', province_list, 3600)

            # 响应身份数据：JsonResponse只能识别字典或者列表数据，他不能识别模型列表（查询集）
            return http.JsonResponse({'code': RETCODE.OK, 'errmsg': 'OK', 'province_list': province_list})
        else:
            # 读取城市或者区县缓存
            sub_area = cache.get('sub_area_' + area_id)
            if sub_area:
                return http.JsonResponse({'code': RETCODE.OK, 'errmsg': 'OK', 'sub_area': sub_area})

            # 查询城市或者区县:如果area_id是省份ID，表示查城市。如果area_id是城市ID，表示查区县。
            # 先查询area_id对应的是省份还是城市(一方)
            parent_model = Area.objects.get(id=area_id)
            # 使用父级数据查询子级数据（一查多）
            sub_model_list = parent_model.subs.all()

            # 将sub_model_list转成字典列表
            sub_list = []
            for sub_model in sub_model_list:
                sub_dict = {
                    "id": sub_model.id,
                    "name": sub_model.name
                }
                sub_list.append(sub_dict)

            # 定义子级的字典
            sub_area = {
                "id": parent_model.id, # 父级ID
                "name": parent_model.name, # 父级名称
                "subs": sub_list
            }

            # 缓存城市或者区县数据
            cache.set('sub_area_' + area_id, sub_area, 3600)

            # 响应城市或者区县
            return http.JsonResponse({'code': RETCODE.OK, 'errmsg': 'OK', 'sub_area': sub_area})